package com.small.nacos.common.task.engine;

import com.small.nacos.common.task.AbstractDelayTask;
import com.small.nacos.common.lifecycle.Closeable;
import com.small.nacos.common.task.NacosTask;
import com.small.nacos.common.task.NacosTaskProcessor;


import java.util.Collection;

/**
 * @Author zhoujin
 * @Date 2022/11/12 13:27
 */
public interface NacosTaskExecuteEngine<T extends NacosTask> extends Closeable {

    /**
     * 添加任务
     * @param key
     * @param task
     */
    void addTask(Object key, T task);

    /**
     * 移除任务
     * @param key
     */
    AbstractDelayTask removeTask(Object key);

    /**
     * 获取任务
     * @param key
     * @return
     */
    T getTask(Object key);

    /**
     * 添加执行器
     * @param key
     * @param taskProcessor
     */
    void addProcessor(Object key, NacosTaskProcessor taskProcessor);

    /**
     * 移除执行器
     * @param key
     */
    void removeProcessor(Object key);

    /**
     * 获取执行器
     * @param key
     * @return
     */
    NacosTaskProcessor getProcessor(Object key);

    /**
     * 执行任务
     */
    void processTasks();

    /**
     * 获取所有任务key
     * @return
     */
    Collection<Object> getAllTaskKeys();

}
